/* 函数防抖 */
export const debounce = function (fn, interval = 300) {
  var timer
  var gapTime = interval
  return function() {
    clearTimeout(timer)
    var context = this
    var args = arguments
    timer = setTimeout(function() {
      timer = null
      fn.apply(context, args)
    }, gapTime)
  }
}
/**
 * 时间格式化
 * @param {String} fmt 日期格式
 * @param {Date} date 时间
 */
export const dateFormat = (fmt = `yyyy-MM-dd hh:mm:ss`, date = new Date()) => {
  const FORMAT = {
    'M+': date.getMonth() + 1,  // 月份
    'd+': date.getDate(),     // 日
    'h+': date.getHours(),     // 小时
    'm+': date.getMinutes(),     // 分
    's+': date.getSeconds()
  }
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  for (let k in FORMAT) {
    if (new RegExp('(' + k + ')').test(fmt)) {
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (FORMAT[k]) : (('00' + FORMAT[k]).substr(('' + FORMAT[k]).length)))
    }
  }
  return fmt
}
/**
 * 返回最多两位小数
 * @param {Number} num 转换数字
 */
export const numFormat = num => {
  return Math.round(num * 100) / 100
}
/**
 * 获取页面参数对象
 * @param {String} url 页面参数
 */
export function getQuery (url) {
  return url.match(/([^?=&]+)(=[^&]*)/g).reduce((acc, val) => {
    let [key, value] = val.split('=')
    acc[key] = typeof value === 'string' ? value.trim() : value
    return acc
  }, {})
}

export const ck = res => res.return_code === '0'
/**
 * 获取页面
 * @param {Number} delta 页面层级
 * eg. 0.当前页 1.上一页
 */
export const getPage = (delta = 0) => {
  let pages = getCurrentPages()
  let page = pages[pages.length - delta - 1]
  return page
}
/**
 * 返回
 * @param {Number} delta 返回层级
 */
export const goBack = (delta = 1) => {
  wx.navigateBack({
    delta
  })
}

export const backPath = (path, cb) => {
  let pages = getCurrentPages()
  let fromPageIndex = pages.findIndex(item => item.route === path)
  if (fromPageIndex >= 0) {
    let delta = pages.length - fromPageIndex - 1
    goBack(delta)
  } else {
    cb && cb()
  }
}
